class Solution {
    /**
     * f[i][0]持有股票     = max( f[i-1][2]-a[i](买入a[i]) , f[i-1][0] )
     * f[i][1]无股票冷冻   = f[i-1][0]+a[i](卖出a[i])
     * f[i][2]无股票不冷冻 = max( f[i-1][1], f[i-1][2])
     */
    public int maxProfit(int[] prices) {
        int len = prices.length;
        if (len == 0)
            return 0;
        int[][] d = new int[prices.length][3];
        d[0][0] = -prices[0];

        for (int i = 1; i < prices.length; i++) {
            // 变成 持有股票
            d[i][0] = Math.max(d[i - 1][0], d[i - 1][2] - prices[i]);
            // 变成 无股票冷冻
            d[i][1] = d[i - 1][0] + prices[i];
            // 变成 无股票不冷冻
            d[i][2] = Math.max(d[i - 1][1], d[i - 1][2]);
        }

        return Math.max(d[len - 1][1], d[len - 1][2]);
    }
}
// 2 1 3

// 1 2 3
